package cn.com.colasoft.dataStructure;

/**
 * [简单排序之-选择排序]
 * 复杂度:O(N^2)
 * 原理:选择排序和冒泡排序类似.与冒泡排序不同的是:每次比较仅记录下最大或最小元素的位置,而不进行交换数据,到最后的时候才交换数据
 * 所以,选择排序的交换数据的次数更少
 * @author lizhitao
 * @date 2017/12/4
 */
public class SelectSort {

    public static void sort(long[] arrays) {
        // 记录当前最小元素的索引位置
        int minIndex;
        for (int i = 0; i < arrays.length; i++) {
            minIndex = i;
            for (int j = i + 1; j < arrays.length; j++) {
                if (arrays[minIndex] > arrays[j]) {
                    minIndex = j;
                }
            }
            // 交换值,将当前循环最小的值进行交换
            swap(arrays, i, minIndex);
        }
    }

    private static void swap(long[] arrays, int i, int minIndex) {
        long tmp = arrays[i];
        arrays[i] = arrays[minIndex];
        arrays[minIndex] = tmp;
    }

    public static void main(String[] args) {
        long[] arrays = new long[]{3,2,5,7,1,4,8};
        sort(arrays);

        for (long item : arrays) {
            System.out.print(item + ",");
        }
    }
}
